package cn.mickey.exchange.service;

import cn.mickey.exchange.domain.model.IdleItemModel;
import cn.mickey.exchange.mapper.IdleItemMapper;
import cn.mickey.exchange.mapper.UserMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class IdleItemService extends ServiceImpl<IdleItemMapper, IdleItemModel> {

    @Resource
    private UserMapper userMapper;

    public boolean addIdleItem(IdleItemModel idleItemModel) {
        return baseMapper.insert(idleItemModel) == 1;
    }

    /**
     * 查询闲置信息，同时查出发布者的信息
     *
     * @param id
     * @return
     */
    public IdleItemModel findIdleItem(Long id) {
        IdleItemModel idleItemModel = baseMapper.selectOne(new LambdaQueryWrapper<IdleItemModel>()
                .eq(IdleItemModel::getIdleId, id));
        if (idleItemModel != null) {
            idleItemModel.setUser(userMapper.getUserById(idleItemModel.getUserId()));
        }
        return idleItemModel;
    }

    /**
     * 分页查询所有的闲置物品信息
     *
     * @param findValue
     * @param p
     * @param n
     * @return
     */
    public Page<IdleItemModel> findIdleItem(String findValue, int p, int n) {
        LambdaQueryWrapper<IdleItemModel> lqw = new LambdaQueryWrapper<>();
        lqw.like(IdleItemModel::getIdleName, findValue)
                .or().like(IdleItemModel::getIdleDetails, findValue)
                .eq(IdleItemModel::getIdleStatus, 1);
        return baseMapper.getIdleItemPageList(new Page<>(p, n), lqw);

    }

    /**
     * 查询用户发布的所有闲置
     * user_id建索引
     *
     * @param userId
     * @return
     */
    public List<IdleItemModel> getAllIdleItem(Long userId) {
        return baseMapper.selectList(new LambdaQueryWrapper<IdleItemModel>()
                .eq(IdleItemModel::getUserId, userId)
                .orderByDesc(IdleItemModel::getReleaseTime));
    }

    /**
     * 分类查询闲置物品信息
     *
     * @param idleLabel
     * @param p
     * @param n
     * @return
     */
    public Page<IdleItemModel> findIdleItemByLabel(Integer idleLabel, int p, int n) {
        LambdaQueryWrapper<IdleItemModel> lqw = new LambdaQueryWrapper<>();
        lqw.eq(IdleItemModel::getIdleLabel, idleLabel)
                .eq(IdleItemModel::getIdleStatus, 1);
        return baseMapper.getIdleItemPageList(new Page<>(p, n), lqw);
    }

    /**
     * 更新闲置状态
     *
     * @param idleItemModel
     * @return
     */
    public boolean updateIdleItem(IdleItemModel idleItemModel) {
        LambdaUpdateWrapper<IdleItemModel> luw = new LambdaUpdateWrapper<>();
        luw.eq(IdleItemModel::getIdleId, idleItemModel.getIdleId())
                .eq(IdleItemModel::getUserId, idleItemModel.getUserId());
        return baseMapper.update(new IdleItemModel()
                .setIdleStatus(idleItemModel.getIdleStatus()), luw) == 1;
    }


    /**
     * 分页查询闲置物品状态
     *
     * @param status
     * @param page
     * @param num
     * @return
     */
    public Page<IdleItemModel> adminGetIdleList(Integer status, int page, int num) {
        LambdaQueryWrapper<IdleItemModel> lqw = new LambdaQueryWrapper<>();
        lqw.eq(IdleItemModel::getIdleStatus, status);
        return baseMapper.getIdleItemPageList(new Page<>(page, num), lqw);
    }
}
